package com.kwum.pattern.SingletonPattern;


/**
 * Description: 
 * 双检锁/双重校验锁（DCL，即 double-checked locking）
 * JDK 版本：JDK1.5 起
 * 是否 Lazy 初始化：是
 * 是否多线程安全：是
 * 实现难度：较复杂
 * 描述：这种方式采用双锁机制，安全且在多线程情况下能保持高性能。
 * getInstance() 的性能对应用程序很关键。
 * @author Kwum
 * @date 2017年9月11日 下午1:41:32
 * @version 1.0
 */

public class SingletonLazyDCL {

    private volatile static SingletonLazyDCL singletonLazyDCL;
    
    private SingletonLazyDCL (){}
    
    public static SingletonLazyDCL getSingleton() {  
        if (singletonLazyDCL == null) {  
            synchronized (SingletonLazyDCL.class) {  
                if (singletonLazyDCL == null) {  
                    singletonLazyDCL = new SingletonLazyDCL();  
                }  
            }  
        }  
        return singletonLazyDCL;  
    }
}
